A typical computer system includes three basic elements, namely, a processor, a memory and an input/output system. The memory stores information, including data and instructions for processing the data, in a plurality of addressable storage locations. The processor enables information to be transferred, or fetched, to it, interprets the incoming information as either instructions or data, and processes the data in accordance with the instructions. The processor then transfers the processed data to addressed locations in the memory for storage.
The input/output system also communicates with the memory and the processor in order to transfer information into the computer system and to obtain the processed data from it for, for example, printing or display to an operator. Units comprising the input/output system normally operate in accordance with control information supplied to them by the processor. The control information defines the operations to be performed by the input/output units. Typical units comprising the input/output system include, for example, printers, video display terminals, and secondary information storage devices such as disk and tape storage units.
In a number of computer systems, virtual memory arrangements have been provided which permit the programmer to write an applications program without having to be concerned either about the amount of physical memory (that is, the number of addressable storage locations) actually included in the system, or other applications programs that the system may be processing concurrently. Virtual memory arrangements permit the programmer to generate an application, including the applications program and data, which may be many times larger than the amount of physical memory which may be included in a practical system.
In a typical computer system that provides a virtual memory arrangement, the computer executes each applications program in the context of a process, with each process having an associated virtual address space. The virtual address space, in turn, has a plurality of virtual addressable locations each identified by a virtual address. Each process's virtual address space is divided into equal-sized pages, and the physical address space of the computer's memory is divided into equally-sized blocks, with the number of storage locations in a block corresponding to the number of addressable locations in a page of virtual address space. Normally, pages containing most of the information, including the program's instructions and data, in a process' virtual address space are maintained on a secondary storage device, and transferred, under control of an operating system program, to blocks in the physical memory as they are needed. Typically, when information is transferred between physical memory and the secondary storage, the amount of information that is transferred corresponds to that which will fill an integral number of blocks when information is transferred to the memory, or from an integral number of blocks when information is transferred from the memory for storage in the secondary storage.
The size of a process's virtual address space may not be fixed, but instead may vary depending on the applications program's requirements. During processing, an applications program may need to increase the size of its virtual address space to accommodate additional data which it may be processing. A program, to increase the size of its process's virtual address space, issues a call to the operating system, which, in turn, determines whether the computer system contains sufficient resources to accommodate the increased virtual address space. In this operation, the operating system, for example, determines whether the secondary storage contains sufficient unused storage space to permit it to handle the increase in the virtual address space. In addition, an applications program may give up a portion of its virtual address space when it is finished with the processing of blocks of data, which, among other things, enables the operating system to free the storage space in secondary storage.